保利威行動端SDK Xcode 16 適配指南
2025-04-29
蘋果公司要求,2025年4月24日開始,所有上傳到 App Store Connect 的應用必須使用 Xcode 16 或更高版本構建,並使用 iOS 18、iPadOS 18、tvOS 18、visionOS 2 或更高版本的 SDK。
[官方文件連結]
https://developer.apple.com/news/upcoming-requirements/?id=02212025a
如果沒有適配,您的應用可能面臨:
App Store 提交時被拒絕
與 iOS 18 和其他最新作業系統版本的相容性問題
不少客戶整合了保利威直播、點播或多場景 SDK,如何適配 Xcode 16 的 SDK 版本?遇到哪些問題可能是未適配 Xcode 16 造成的?
目前,保利威行動端 SDK 已適配 iOS 18,本文將介紹保利威行動端 SDK 適配 Xcode 16 的技術經驗。
一、未適配 SDK 的已知問題
問題 1
Bitcode 相關錯誤
在使用 Xcode 16 提交應用到 App Store 時,您可能會遇到以下錯誤:
The following issues occurred while distributing your application.
Asset validation failed Invalid Executable. The executable 'YourApp.app/Frameworks/YourSDK.framework/YourSDK' contains bitcode. (ID: 12345678-1234-1234-1234-123456789012)
[問題原因]
Xcode 16 完全移除了對 bitcode 的支援,而我們的舊版 SDK 仍包含 bitcode。當您嘗試提交應用時,App Store Connect 會拒絕包含 bitcode 的二進位檔案。
[實際案例]
某客戶使用保利威行動端 SDK 5.x 版本,在 Xcode 15 上構建時一切正常,但升級到 Xcode 16 後,應用提交被拒絕,錯誤日誌顯示:
Asset validation failed Invalid Executable. The executable 'ClientApp.app/Frameworks/PLVIJKPlayer.framework/PLVIJKPlayer' contains bitcode.
[Bitcode 錯誤範例]

問題 2
maskView 同名屬性在 iOS 18 引發崩潰
在 iOS 18 中,如果您的 SDK 或應用中定義了與 UIView 類別的 maskView 屬性同名的屬性,將觸發斷言並導致應用崩潰。
[問題原因]
iOS 18 對 UIView.maskView 增加了斷言檢查。在之前的 iOS 版本中,開發者可能在自訂視圖類別中定義了名為 maskView 的屬性,而這與 UIKit 中 UIView 類別的屬性同名。
在 iOS 18 中,當系統試圖存取 UIView 的 maskView 屬性時,會檢查是否存在同名屬性衝突,如果發現衝突,將觸發斷言並導致應用崩潰。
[崩潰表現]
當應用在 iOS 18 裝置上執行時會出現崩潰,崩潰日誌會顯示類似以下內容:
*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Set `maskView` on <CustomView: 0x12345678> is not allowed.'
或者顯示斷言失敗資訊:
Assertion failed: (![self respondsToSelector:@selector(maskView)] || [self.class instancesRespondToSelector:@selector(maskView)]), function -[UIView maskView], file /Library/Caches/com.apple.xbs/Sources/UIKitCore/UIKit-5023.100.106/UIView.m, line 13954.
[受影響程式碼範例]
// 在SDK或应用中的自定义视图类
@interface customView : UIView
@property (nonatomic, strong, readonly) UIView *maskView; // 与UIKit中UIView的属性同名
@end
@implementation customView
- (instancetype)initWithFrame:(CGRect)frame {
self = [super initWithFrame:frame];
if (self) {[self addSubview:self.maskView];}
return self;
}
- (UIView *)maskView {
if (!_maskView) {
_maskView = [[UIView alloc] init];
_maskView.backgroundColor = [UIColor clearColor];
// 其他配置...
}
return _maskView;
}
@end
[解決方案]
將業務程式碼中的 maskView 屬性修改為其他命名方式,例如改為 customMaskView:
@interface customView : UIView
// 修改为不同的名称以避免与UIKit冲突
@property (nonatomic, strong, readonly) UIView *customMaskView;
@end
@implementation customView
- (instancetype)initWithFrame:(CGRect)frame {
self = [super initWithFrame:frame];
if (self) {
[self addSubview:self.customMaskView];
}
return self;
}
- (UIView *)customMaskView {
if (!_customMaskView) {
_customMaskView = [[UIView alloc] init];
_customMaskView.backgroundColor = [UIColor clearColor];
// 其他配置...
}
return _customMaskView;
}
@end
[注意事項]
這個問題只在 iOS 18 及以上版本中出現,但建議對所有版本進行適配。 如果您的 SDK 或應用中使用了第三方函式庫,請確保這些函式庫也已經適配了 iOS 18,並檢查它們是否存在 maskView 同名屬性問題。
二、保利威行動端 SDK 適配技術指南
步驟 1
更新至相容 Xcode 16 的 SDK
1.保利威行動端點播 SDK
- 幫助中心地址:https://help.polyv.net/#/vod/ios/
- GitHub 地址:https://github.com/polyv/polyv-ios-vod-sdk
- SDK 適配 Xcode 16 推薦版本:2.23.0 及以上。預設引用解決 PLVIJKPlayer 0.15.0 解決 bitcode 問題。
- SDK 適配 Xcode 16 的最低版本:2.22.2。該版本僅解決 SDK 內部使用 maskView 同名屬性問題,需升級 PLVIJKPlayer 0.15.0 版本
- 若同時整合多場景 SDK 和點播 SDK,請看本單元第五小節
2.行動端點播播放器 SDK
- 幫助中心地址:https://help.polyv.net/index.html#/vod/ios_player_sdk/
- GitHub 地址:https://github.com/polyv/polyv-ios-media-player-sdk-demo
- SDK 適配 Xcode 16 推薦版本:2.5.0 及以上。預設引用解決 PLVIJKPlayer 0.15.0 解決 bitcode 問題以及 maskView 同名屬性問題
- 若同時整合多場景 SDK 和點播播放器 SDK,請看本單元第五小節
3.行動端多場景 SDK
- 幫助中心地址:https://help.polyv.net/#/live/ios/
- GitHub 地址:https://github.com/polyv/polyv-ios-livescenes-sdk-demo
- SDK 適配 Xcode 16 推薦版本:1.24.0 及以上。預設引用解決 PLVIJKPlayer 0.15.0 解決 bitcode 問題
- SDK 適配 Xcode 16 最低版本:1.20.0。該版本修改 Demo 使用 maskView 同名屬性的問題
- 該 SDK 內部未使用 maskView 同名屬性,僅 Demo 層有應用,如不升級可直接對 Demo 層原始碼進行修改
- 若同時整合多場景 SDK 和點播相關 SDK,請看本單元第五小節
4.行動端 Webview SDK
- 幫助中心地址:https://help.polyv.net/#/live/webview/
- GitHub 地址:https://github.com/polyv/polyv-ios-webview-demo
- SDK 適配 Xcode 16 推薦版本:3.2.3 及以上。
5.同時整合多場景 SDK 和點播相關 SDK
- 點播 SDK 2.23.0 及以上版本,除預設升級 PLVIJKPlayer 引用,同時涉及最佳化 HttpDNS 內部表現,升級了 PLVAliHttpDNS 至 3.2.0 版本。而多場景 SDK 1.24.0 及以下版本、點播播放器 SDK 2.5.0 及以下版本 仍使用 PLVAliHttpDNS 1.10.x 版本,會造成 SDK 衝突。
- 為避免 PLVAliHttpDNS 升級導致的衝突問題,可選擇引用 PLVAliHttpDNS 1.10.x 的版本:將點播 SDK 版本號控制在 2.22.2-2.22.4 版本,點播播放器 SDK 版本號控制在 2.5.0,多場景 SDK 版本號控制在 1.20.0-1.24.0 版本。後續我們會陸續發布適配 PLVAliHttpDNS 升級的多場景 SDK 和點播播放器 SDK。
- 同時整合多場景 SDK 和點播相關 SDK,需升級 PLVIJKPlayer 0.15.0 版本,解決 bitcode 問題以及 maskView 同名屬性問題
- 若有引用相關問題可及時與保利威客服聯繫,我們竭誠為您解決相關問題。
步驟 2
處理現有框架的 Bitcode 問題
如果您遇到與任何框架(包括第三方框架)相關的 bitcode 錯誤:
導航到框架目錄:
cd path/to/Framework.framework
檢查框架是否包含 bitcode:
otool -l Framework | grep __LLVM | wc -l
如果結果不為 0,移除 bitcode:
xcrun bitcode_strip -r Framework -o Framework
以上是保利威行動端 SDK Xcode 16 適配相關問題與說明,若有疑問可於聯繫保利威服務群聯繫技術顧問。demo 演示或合作諮詢請掃描下方二維碼。
添加保利威技術顧問
獲取專屬解決方案
